Pass irq number in regs->orig_eax like the regular i386 code.
* SMP cross-CPU interrupts have their own specific
* handlers).
*/
-unsigned int do_IRQ(int irq, struct pt_regs *regs)
-{
+fastcall unsigned int do_IRQ(struct pt_regs *regs)
+{
+ /* high bits used in ret_from_ code */
+ int irq = regs->orig_eax & 0xff;
#ifdef CONFIG_4KSTACKS
union irq_ctx *curctx, *irqctx;
u32 *isp;
static unsigned long pirq_needs_unmask_notify[NR_PIRQS/sizeof(unsigned long)];
/* Upcall to generic IRQ layer. */
-extern unsigned int do_IRQ(int irq, struct pt_regs *regs);
+#ifdef CONFIG_X86
+extern fastcall unsigned int do_IRQ(struct pt_regs *regs);
+#define do_IRQ(irq, regs) do { \
+ (regs)->orig_eax = (irq); \
+ do_IRQ((regs)); \
+} while (0)
+#endif
#define VALID_EVTCHN(_chn) ((_chn) != -1)